%%%%%%%%%%%%%%%%%%%%%%
%% start of file `elegantbook.cls'.
%% Copyright 2013-2020 ElegantLaTeX (elegantlatex2e@gmail.com)
%%
%% This work may be distributed and/or modified freely
%% available at https://github.com/ElegantLaTeX/ElegantBook
% 
%%%%%%%%%%%%%%%%%%%%%
% % !Mode:: "TeX:UTF-8"
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{elegantbook}[2020/06/03 v4.0.1 ElegantBook document class]

\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{family=ELEGANT, prefix=ELEGANT@, setkeys=\kvsetkeys}
\newcommand{\ekv}[1]{\kvsetkeys{ELEGANT}{#1}}

% ----- Colors -----
\DeclareStringOption[blue]{color}
\DeclareStringOption[en]{lang}
\DeclareStringOption[answer]{result}
\DeclareStringOption[fancy]{mode}
\DeclareStringOption[normal]{device}
\DeclareStringOption[cm]{math}
\DeclareStringOption[marginfalse]{marginpar}
\DeclareStringOption[onecol]{toc}
\DeclareStringOption{scheme}
% ----- backward compatibility
\DeclareVoidOption{green}{\ekv{color=green}}
\DeclareVoidOption{cyan}{\ekv{color=cyan}}
\DeclareVoidOption{blue}{\ekv{color=blue}}
\DeclareVoidOption{gray}{\ekv{color=gray}}
\DeclareVoidOption{black}{\ekv{color=black}}
\DeclareVoidOption{nocolor}{\ekv{color=none}}
\DeclareStringOption[ctexfont]{chinesefont}

\DeclareVoidOption{chinese}{\ekv{scheme=chinese}}

\DeclareVoidOption{ctexfont}{\ekv{chinesefont=ctexfont}}
\DeclareVoidOption{founder}{\ekv{chinesefont=founder}}
\DeclareVoidOption{nofont}{\ekv{chinesefont=nofont}}

\DeclareVoidOption{en}{\ekv{lang=en}}
\DeclareVoidOption{cn}{\ekv{lang=cn}}
\DeclareVoidOption{it}{\ekv{lang=it}}

\DeclareVoidOption{fancy}{\ekv{mode=fancy}}
\DeclareVoidOption{simple}{\ekv{mode=simple}}

\DeclareVoidOption{answer}{\ekv{result=answer}}
\DeclareVoidOption{noanswer}{\ekv{result=noanswer}}

\DeclareVoidOption{normal}{\ekv{device=normal}}
\DeclareVoidOption{pad}{\ekv{device=pad}}

\DeclareStringOption[numbers]{cite}
\DeclareVoidOption{numbers}{\ekv{cite=numbers}}
\DeclareVoidOption{authoryear}{\ekv{cite=authoryear}}
\DeclareVoidOption{super}{\ekv{cite=super}}

\DeclareStringOption[apalike]{bibstyle}

\DeclareVoidOption{newtx}{\ekv{math=newtx}}
\DeclareVoidOption{mtpro2}{\ekv{math=mtpro2}}
\DeclareVoidOption{cm}{\ekv{math=cm}}

\DeclareVoidOption{margintrue}{\ekv{marginpar=margintrue}}
\DeclareVoidOption{marginfalse}{\ekv{marginpar=marginfalse}}

\DeclareVoidOption{onecol}{\ekv{toc=onecol}}
\DeclareVoidOption{twocol}{\ekv{toc=twocol}}

% ----- Math option -----
\newcommand\mailto[1]{\href{mailto:#1}{\nolinkurl{#1}}}

% ----- Title Style -----
\DeclareStringOption[hang]{titlestyle}[hang]
% ----- backward compatibility
\DeclareVoidOption{hang}{\ekv{titlestyle=hang}}
\DeclareVoidOption{display}{\ekv{titlestyle=display}}
% ----- Default Options -----
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{book}}

\ProcessKeyvalOptions*\relax
% \ProcessOptions*\relax
\LoadClass[a4paper,oneside]{book}

\RequirePackage{setspace}
\RequirePackage{hyperref}
\hypersetup{
	breaklinks,
	unicode,
	linktoc=all,
	bookmarksnumbered=true,
	bookmarksopen=true,
	pdfkeywords={ElegantBook},
	colorlinks,
	linkcolor=winered,
	citecolor=winered,
	urlcolor=winered,
	plainpages=false,
	pdfstartview=FitH,
	pdfborder={0 0 0},
	linktocpage
}

%% device settings
\RequirePackage{geometry}
\ifdefstring{\ELEGANT@device}{normal}{
	\geometry{
		a4paper,
		top=25.4mm, bottom=25.4mm,
		headheight=2.17cm,
		headsep=4mm,
		footskip=12mm
	}
	\ifdefstring{\ELEGANT@marginpar}{margintrue}{
		\geometry{
			marginparwidth=5cm, marginparsep=5mm,
			left=2cm,right=7cm}}{\relax}}{
	\relax}

\ifdefstring{\ELEGANT@device}{pad}{
	\geometry{
		paperwidth=7.5in,
		paperheight=10in,
		margin=16mm,
		headheight=2.17cm,
		footskip=4mm
	}}{\relax}

\RequirePackage{indentfirst,comment}
% fontsetting
\ifdefstring{\ELEGANT@math}{mtpro2}{
	\let\Bbbk\relax
	\RequirePackage[lite]{mtpro2}
}{\relax}

\setcounter{tocdepth}{1}

\PassOptionsToPackage{no-math}{fontspec}
\RequirePackage{iftex}
\ifdefstring{\ELEGANT@lang}{cn}{
	\ifXeTeX
		\ifdefstring{\ELEGANT@chinesefont}{founder}{
			\RequirePackage[UTF8,scheme=plain,fontset=none]{ctex}
			\setCJKmainfont[BoldFont={FZHei-B01},ItalicFont={FZKai-Z03}]{FZShuSong-Z01}
			\setCJKsansfont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZHei-B01}
			\setCJKmonofont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZFangSong-Z02}
			\setCJKfamilyfont{zhsong}{FZShuSong-Z01}
			\setCJKfamilyfont{zhhei}{FZHei-B01}
			\setCJKfamilyfont{zhkai}{FZKai-Z03}
			\setCJKfamilyfont{zhfs}{FZFangSong-Z02}
			\newcommand*{\songti}{\CJKfamily{zhsong}}
			\newcommand*{\heiti}{\CJKfamily{zhhei}}
			\newcommand*{\kaishu}{\CJKfamily{zhkai}}
			\newcommand*{\fangsong}{\CJKfamily{zhfs}}}{\relax}

		\ifdefstring{\ELEGANT@chinesefont}{nofont}{
			\RequirePackage[UTF8,scheme=plain,fontset=none]{ctex}}{\relax}

		\ifdefstring{\ELEGANT@chinesefont}{ctexfont}{
			\RequirePackage[UTF8,scheme=plain]{ctex}}{\relax}
	\else
		\ifdefstring{\ELEGANT@chinesefont}{ctexfont}{
			\RequirePackage[UTF8,scheme=plain]{ctex}}{\relax}
	\fi
	\AfterEndPreamble{
		% \renewcommand{\itshape}{\kaishu}
		\setlength\parindent{2\ccwd}}}{\relax}

\ifcsname kaishu\endcsname
	\newcommand{\citshape}{\kaishu}
\else
	\newcommand{\citshape}{\itshape}
\fi
\ifcsname kaishu\endcsname
	\newcommand{\cnormal}{\kaishu}
\else
	\newcommand{\cnormal}{\normalfont}
\fi

\ifcsname fangsong\endcsname
	\newcommand{\cfs}{\fangsong}
\else
	\newcommand{\cfs}{\normalfont}
\fi

\RequirePackage{newtxtext}
\RequirePackage{anyfontsize}
\ifdefstring{\ELEGANT@math}{newtx}{
	\RequirePackage{newtxmath}
	\let\Bbbk\relax
	\RequirePackage{esint}
	%%% use yhmath pkg, uncomment following code
	% \let\oldwidering\widering
	% \let\widering\undefined
	% \RequirePackage{yhmath}
	% \let\widering\oldwidering

	%%% use esvect pkg, uncomment following code
	% \RequirePackage{esvect}

	\DeclareSymbolFont{CMlargesymbols}{OMX}{cmex}{m}{n}
	\let\sumop\relax\let\prodop\relax
	\DeclareMathSymbol{\sumop}{\mathop}{CMlargesymbols}{"50}
	\DeclareMathSymbol{\prodop}{\mathop}{CMlargesymbols}{"51}
}{\relax}

% ----- Handle Colors -----
%% 章节以及页脚图形

\RequirePackage{xcolor}
\ifdefstring{\ELEGANT@color}{green}{
	\definecolor{structurecolor}{RGB}{0,120,2}%
	\definecolor{main}{RGB}{0,120,2}%
	\definecolor{second}{RGB}{230,90,7}%
	\definecolor{third}{RGB}{0,160,152}%
}{\relax}
\ifdefstring{\ELEGANT@color}{cyan}{
	\definecolor{structurecolor}{RGB}{31,186,190}%
	\definecolor{main}{RGB}{59,180,5}%
	\definecolor{second}{RGB}{175,153,8}%
	\definecolor{third}{RGB}{244,105,102}%
}{\relax}
\ifdefstring{\ELEGANT@color}{blue}{
	\definecolor{structurecolor}{RGB}{60,113,183}
	\definecolor{main}{RGB}{0,166,82}%
	\definecolor{second}{RGB}{255,134,24}%
	\definecolor{third}{RGB}{0,174,247}%
}{\relax}
\ifdefstring{\ELEGANT@color}{gray}{
	\definecolor{structurecolor}{RGB}{150,150,150}
	\definecolor{main}{RGB}{150,150,150}%
	\definecolor{second}{RGB}{150,150,150}%
	\definecolor{third}{RGB}{150,150,150}%
}{\relax}
\ifdefstring{\ELEGANT@color}{black}{
	\definecolor{structurecolor}{RGB}{0,0,0}
	\definecolor{main}{RGB}{0,0,0}%
	\definecolor{second}{RGB}{0,0,0}%
	\definecolor{third}{RGB}{0,0,0}%
}{\relax}

%green color
\definecolor{structure1}{RGB}{0,120,2}%
\definecolor{main1}{RGB}{0,120,2}%
\definecolor{second1}{RGB}{230,90,7}%
\definecolor{third1}{RGB}{0,160,152}%
%cyan color
\definecolor{structure2}{RGB}{31,186,190}%
\definecolor{main2}{RGB}{59,180,5}%
\definecolor{second2}{RGB}{175,153,8}%
\definecolor{third2}{RGB}{244,105,102}%
%blue color
\definecolor{structure3}{RGB}{60,113,183}
\definecolor{main3}{RGB}{0,166,82}%
\definecolor{second3}{RGB}{255,134,24}%
\definecolor{third3}{RGB}{0,174,247}%
% gray color
\definecolor{structure4}{RGB}{150,150,150}
\definecolor{main4}{RGB}{150,150,150}%
\definecolor{second4}{RGB}{150,150,150}%
\definecolor{third4}{RGB}{150,150,150}%
% black color
\definecolor{structure5}{RGB}{0,0,0}
\definecolor{main5}{RGB}{0,0,0}%
\definecolor{second5}{RGB}{0,0,0}%
\definecolor{third5}{RGB}{0,0,0}%

% corlor definition
\definecolor{winered}{rgb}{0.5,0,0}
\definecolor{bule}{RGB}{18,29,57}
\definecolor{codebgcolor}{RGB}{220,220,220}

% ----- Title Style -----
\ifdefstring{\ELEGANT@titlestyle}{hang}{\def\style{hang}}{\relax}
\ifdefstring{\ELEGANT@titlestyle}{display}{\def\style{display}}{\relax}

% reference: 
% https://tex.stackexchange.com/questions/58506/how-to-make-a-new-command-similar-to-author
% https://pastebin.com/C8W4axzV
\newcommand\email[1]{\href{mailto:#1}{\nolinkurl{#1}}}

\global\let\@title\@empty
\global\let\@author\@empty
\global\let\@date\@empty
\newcommand{\subtitle}[1]{\gdef\@subtitle{#1}}
\newcommand{\institute}[1]{\gdef\@institute{#1}}
\newcommand{\version}[1]{\gdef\@version{#1}}
\newcommand{\extrainfo}[1]{\gdef\@extrainfo{#1}}

\RequirePackage{mwe}
\newcommand{\logo}[1]{\gdef\@logo{#1}}
\newcommand{\cover}[1]{\gdef\@cover{#1}}

\newcommand{\question}[1]{{\par\citshape #1}\\[0.2ex]}

\ifdefstring{\ELEGANT@lang}{cn}{\relax}{
	\RequirePackage[\ELEGANT@cite,sort&compress]{natbib}}

\RequirePackage{enumerate}
% list/itemize/enumerate setting
\RequirePackage[shortlabels,inline]{enumitem}
\setlist{nolistsep}

\RequirePackage[font=small,labelfont={bf,color=structurecolor}]{caption}
\captionsetup[table]{skip=3pt}
\captionsetup[figure]{skip=3pt}

\AtBeginDocument{
	\setlength{\abovedisplayskip}{3pt}
	\setlength{\belowdisplayskip}{3pt}
	\RequirePackage[flushmargin,stable]{footmisc}
	\setlength{\footnotesep}{12pt}
}

\ifdefstring{\ELEGANT@toc}{twocol}{
	\renewcommand{\tableofcontents}{%
		\setlength{\columnsep}{2em}
		%\setlength{\columnseprule}{.8pt}
		\begin{multicols}{2}[\chapter*{\contentsname}]%
			\@starttoc{toc}%
		\end{multicols}}
}{\relax}


%% 常用宏包
\linespread{1.3}

\RequirePackage{graphicx}
%\RequirePackage{enumerate}
\RequirePackage{amsmath,mathrsfs,amsfonts,amssymb}
% \providecommand\qed{}
% \renewcommand{\qed}{\hfill\ensuremath{\square}}
\RequirePackage{booktabs}
\RequirePackage{multicol,multirow}
\RequirePackage{xcolor}
\RequirePackage{fancyvrb}
\RequirePackage{makecell,lipsum,hologo}
%%中文结构名字
\ifdefstring{\ELEGANT@lang}{cn}{
	\renewcommand{\contentsname}{目录}
	\renewcommand{\figurename}{图}
	\renewcommand{\tablename}{表}
	\renewcommand{\partname}{\color{structurecolor}}
	\renewcommand{\thepart}{第\zhnumber{\arabic{part}}部分}
	\renewcommand{\listfigurename}{插图目录}
	\renewcommand{\listtablename}{表格目录}
	\renewcommand{\bibname}{参考文献}
	\renewcommand{\appendixname}{附录~\thechapter}
	\renewcommand{\indexname}{索\hspace{2em}引}
	\newcommand\figref[1]{\textbf{图}~\ref{#1}}
	\newcommand\coderef[1]{\textbf{代码}~\ref{#1}}
	\newcommand\tabref[1]{\textbf{表}~\ref{#1}}
	\ifdefstring{\ELEGANT@scheme}{chinese}{
		\renewcommand{\chaptername}{第~\zhnumber{\arabic{chapter}}~章}}{
		\renewcommand{\chaptername}{第~\thechapter{}~章}}
	\newcommand{\authorname}{\citshape 作者：}
	\newcommand{\institutename}{\citshape 组织：}
	\newcommand{\datename}{\citshape 时间：}
	\newcommand{\versionname}{\citshape 版本：}
	\RequirePackage{gbt7714}
	\ifdefstring{\ELEGANT@cite}{authoryear}{
		\bibliographystyle{gbt7714-author-year}}{
		\bibliographystyle{gbt7714-numerical}}
	\ifdefstring{\ELEGANT@cite}{numbers}{
		\citestyle{numbers}}{\relax}
	\newcommand{\notename}{笔记}
	\renewcommand*{\proofname}{证明}
	\newcommand{\problemname}{例题}
	\newcommand{\definitionname}{定义}
	\newcommand{\theoremname}{定理}
	\newcommand{\axiomname}{公理}
	\newcommand{\postulatename}{公设}
	\newcommand{\lemmaname}{引理}
	\newcommand{\propositionname}{命题}
	\newcommand{\corollaryname}{推论}
	\newcommand{\examplename}{例}
	\newcommand{\exercisename}{练习}
	\newcommand{\remarkname}{注}
	\newcommand{\assumptionname}{假设}
	\newcommand{\conclusionname}{结论}
	\newcommand{\solutionname}{解}
	\newcommand{\propertyname}{性质}
	\newcommand{\introductionname}{内容提要}
	\newcommand{\problemsetname}{习题}
	\newcommand\bioinfo[2]{\gdef\@bioinfo{{\citshape #1}：#2}}
	\newcommand{\updatename}{更新：}
	\newcommand{\historyname}{版本更新历史}}{\relax}
\ifdefstring{\ELEGANT@lang}{en}{
	\setlength\parindent{2em}
	\newcommand\figref[1]{\textbf{Figure}~\ref{#1}}
	\newcommand\tabref[1]{\textbf{Table}~\ref{#1}}
	\renewcommand{\partname}{\color{structurecolor} Part}
	\renewcommand{\chaptername}{Chapter \thechapter}
	\newcommand{\authorname}{\textbf{Author: }}
	\newcommand{\institutename}{\textbf{Institute: }}
	\newcommand{\datename}{\textbf{Date: }}
	\newcommand{\versionname}{\textbf{Version: }}
	\bibliographystyle{\ELEGANT@bibstyle}
	\newcommand{\notename}{Note}
	\newcommand{\proofname}{Proof}
	\newcommand{\problemname}{Problem}
	\newcommand{\definitionname}{Definition}
	\newcommand{\theoremname}{Theorem}
	\newcommand{\axiomname}{Axiom}
	\newcommand{\postulatename}{Postulate}
	\newcommand{\lemmaname}{Lemma}
	\newcommand{\propositionname}{Proposition}
	\newcommand{\corollaryname}{Corollary}
	\newcommand{\examplename}{Example}
	\newcommand{\exercisename}{Exercise}
	\newcommand{\remarkname}{Remark}
	\newcommand{\assumptionname}{Assumption}
	\newcommand{\conclusionname}{Conclusion}
	\newcommand{\solutionname}{Solution}
	\newcommand{\propertyname}{Property}
	\newcommand{\introductionname}{Introduction}
	\newcommand{\problemsetname}{Exercise}
	\newcommand\bioinfo[2]{\gdef\@bioinfo{\textbf{#1}: #2}}
	\newcommand{\updatename}{Updates:}
	\newcommand{\historyname}{Version History}
}{\relax}

\ifdefstring{\ELEGANT@lang}{it}{
	\RequirePackage[italian]{babel}
	\setlength\parindent{2em}
	\newcommand\figref[1]{\textbf{Figura}~\ref{#1}}
	\newcommand\tabref[1]{\textbf{Tabella}~\ref{#1}}
	\renewcommand{\chaptername}{Capitolo \arabic{chapter}}
	\newcommand{\authorname}{\textbf{Autore: }}
	\newcommand{\institutename}{\textbf{Istituto: }}
	\newcommand{\datename}{\textbf{Data: }}
	\newcommand{\versionname}{\textbf{Versione: }}
	\bibliographystyle{\ELEGANT@bibstyle}
	\newcommand{\notename}{Nota}
	\newcommand{\proofname}{Dimostrazione}
	\newcommand{\problemname}{Problema}
	\newcommand{\definitionname}{Definizione}
	\newcommand{\theoremname}{Teorema}
	\newcommand{\axiomname}{Assioma}
	\newcommand{\postulatename}{Postulato}
	\newcommand{\lemmaname}{Lemma}
	\newcommand{\propositionname}{Proposizione}
	\newcommand{\corollaryname}{Corollario}
	\newcommand{\examplename}{Esempio}
	\newcommand{\exercisename}{Esercizio}
	\newcommand{\remarkname}{Commento}
	\newcommand{\assumptionname}{Assunto}
	\newcommand{\conclusionname}{Conclusione}
	\newcommand{\solutionname}{Soluzione}
	\newcommand{\propertyname}{Proprietà}
	\newcommand{\introductionname}{Introduzione}
	\newcommand{\problemsetname}{Esercizio}
	\newcommand\bioinfo[2]{\gdef\@bioinfo{\textbf{#1}: #2}}
	\newcommand{\updatename}{Aggiornamenti:}
	\newcommand{\historyname}{Cronologia delle versioni}
}{\relax}

\setlength{\bibsep}{0.0pt}
\def\bibfont{\footnotesize}

\RequirePackage{xpatch}
\xpatchcmd{\part}{
	\thispagestyle{plain}}{
	\thispagestyle{plain}}{}{}
\xpatchcmd{\@endpart}{
	\vfil\newpage}{
	\vfil\newpage}{}{}

\graphicspath{{./figure/}{./figures/}{./image/}{./images/}{./graphics/}{./graphic/}{./pictures/}{./picture/}}

\usepackage{tikz} %% load tikz without tikz
\usetikzlibrary{backgrounds,calc,shadows}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
		\node[shape=circle,draw,inner sep=1pt] (char) {#1};}}
%  https://tex.stackexchange.com/questions/7032/good-way-to-make-textcircled-numbers

\newcommand*{\eitemi}{\tikz \draw [baseline, ball color=structurecolor,draw=none] circle (2pt);}
\newcommand*{\eitemii}{\tikz \draw [baseline, fill=structurecolor,draw=none,circular drop shadow] circle (2pt);}
\newcommand*{\eitemiii}{\tikz \draw [baseline, fill=structurecolor,draw=none] circle (2pt);}
\setlist[enumerate,1]{label=\color{structurecolor}\arabic*.}
\setlist[enumerate,2]{label=\color{structurecolor}(\alph*).}
\setlist[enumerate,3]{label=\color{structurecolor}\Roman*.}
\setlist[enumerate,4]{label=\color{structurecolor}\Alph*.}
\setlist[itemize,1]{label={\eitemi}}
\setlist[itemize,2]{label={\eitemii}}
\setlist[itemize,3]{label={\eitemiii}}


%%   章节设置
\RequirePackage[center,pagestyles]{titlesec}
\RequirePackage{apptools}
\RequirePackage[toc,page,title,titletoc]{appendix}

\setcounter{secnumdepth}{5}

\titleformat{\chapter}[\style]{\bfseries}
{\filcenter\LARGE\enspace\bfseries{\color{structurecolor}\IfAppendix{\appendixname}{\chaptername}\enspace}}{1pt}{\bfseries\color{structurecolor}\LARGE\filcenter}[]

\titleformat{\section}[hang]{\bfseries}{
	\Large\bfseries{\color{structurecolor}\thesection}\enspace}{1pt}{%
	\color{structurecolor}\Large\bfseries\filright}
\titleformat{\subsection}[hang]{\bfseries}{
	\large\bfseries\color{structurecolor}\thesubsection\enspace}{1pt}{%
	\color{structurecolor}\large\bfseries\filright}
\titleformat{\subsubsection}[hang]{\bfseries}{
	\large\bfseries\color{structurecolor}\thesubsubsection\enspace}{1pt}{%
	\color{structurecolor}\large\bfseries\filright}


\titlespacing{\chapter}{0pt}{-20pt}{1.3\baselineskip}
%\titlespacing{\subsection}{0pt}{0.5\baselineskip}{-\baselineskip}

%%define the note and proof environment
\RequirePackage{pifont,manfnt,bbding}

\RequirePackage[many]{tcolorbox}

% \newlength{\normalparindent}
% \setlength{\normalparindent}{\parindent}
\ifdefstring{\ELEGANT@mode}{fancy}{
	\tcbset{
		common/.style={
				fontupper=\citshape,
				lower separated=false,
				% before upper={\setlength{\parindent}{\normalparindent}},
				coltitle=white,
				colback=gray!5,
				boxrule=0.5pt,
				fonttitle=\bfseries,
				enhanced,
				breakable,
				top=8pt,
				before skip=8pt,
				attach boxed title to top left={
						yshift=-0.11in,
						xshift=0.15in},
				boxed title style={
						boxrule=0pt,
						colframe=white,
						arc=0pt,
						outer arc=0pt},
				separator sign={.},},
		defstyle/.style={
				common,
				colframe=main,
				colback=main!5,
				colbacktitle=main,
				overlay unbroken and last={
						\node[anchor=south east, outer sep=0pt] at (\linewidth-width,0) {
							\textcolor{main}{$\clubsuit$}};}},
		thmstyle/.style={
				common,
				colframe=second,
				colback=second!5,
				colbacktitle=second,
				overlay unbroken and last={
						\node[anchor=south east, outer sep=0pt] at (\linewidth-width,0) {
							\textcolor{second}{$\heartsuit$}};}},
		propstyle/.style={
				common,
				colframe=third,
				colback=third!5,
				colbacktitle=third,
				overlay unbroken and last={
						\node[anchor=south east, outer sep=0pt] at (\linewidth-width,0) {
							\textcolor{third}{$\spadesuit$}};}},}

	% \newtcbtheorem[auto counter,number within=chapter]{definition}{\definitionname}{defstyle}{def}
	\DeclareTColorBox[auto counter,number within=chapter]{definition}{ o t\label g }{
		common,defstyle,
		IfValueTF={#1}{title={\definitionname~\thetcbcounter\ (#1)}}{title=\definitionname~\thetcbcounter},
		IfBooleanTF={#2}{label=#3}{}}
	% \newtcbtheorem[auto counter,number within=chapter]{theorem}{\theoremname}{thmstyle}{thm}
	\DeclareTColorBox[auto counter,number within=chapter]{theorem}{ o t\label g }{
		common,thmstyle,
		IfValueTF={#1}{title={\theoremname~\thetcbcounter\ (#1)}}{title=\theoremname~\thetcbcounter},
		IfBooleanTF={#2}{label=#3}{}}
	% \newtcbtheorem[auto counter,number within=chapter]{postulate}{\postulatename}{thmstyle}{pos}
	\DeclareTColorBox[auto counter,number within=chapter]{postulate}{ o t\label g }{
		common,thmstyle,
		IfValueTF={#1}{title={\postulatename~\thetcbcounter\ (#1)}}{title=\postulatename~\thetcbcounter},
		IfBooleanTF={#2}{label=#3}{}}
	% \newtcbtheorem[auto counter,number within=chapter]{axiom}{\axiomname}{thmstyle}{axi}
	\DeclareTColorBox[auto counter,number within=chapter]{axiom}{ o t\label g }{
		common,thmstyle,
		IfValueTF={#1}{title={\axiomname~\thetcbcounter\ (#1)}}{title=\axiomname~\thetcbcounter},
		IfBooleanTF={#2}{label=#3}{}}
	% \newtcbtheorem[auto counter,number within=chapter]{corollary}{\corollaryname}{thmstyle}{cor}
	\DeclareTColorBox[auto counter,number within=chapter]{corollary}{ o t\label g }{
		common,thmstyle,
		IfValueTF={#1}{title={\corollaryname~\thetcbcounter\ (#1)}}{title=\corollaryname~\thetcbcounter},
		IfBooleanTF={#2}{label=#3}{}}
	% \newtcbtheorem[auto counter,number within=chapter]{lemma}{\lemmaname}{thmstyle}{lem}
	\DeclareTColorBox[auto counter,number within=chapter]{lemma}{ o t\label g }{
		common,thmstyle,
		IfValueTF={#1}{title={\lemmaname~\thetcbcounter\ (#1)}}{title=\lemmaname~\thetcbcounter},
		IfBooleanTF={#2}{label=#3}{}}
	% \newtcbtheorem[auto counter,number within=chapter]{proposition}{\propositionname}{propstyle}{pro}
	\DeclareTColorBox[auto counter,number within=chapter]{proposition}{ o t\label g }{
		common,propstyle,
		IfValueTF={#1}{title={\propositionname~\thetcbcounter\ (#1)}}{title=\propositionname~\thetcbcounter},
		IfBooleanTF={#2}{label=#3}{}}
}{\relax}


\ifdefstring{\ELEGANT@mode}{simple}{
	\let\openbox\relax
	\RequirePackage{amsthm}
	\let\proof\relax
	% \let\proofname\relax
	\let\endproof\relax

	% declare a new theorem style
	\newtheoremstyle{defstyle}{3pt}{3pt}{\citshape}{-3pt}{
		\bfseries\color{main}}{}{0.5em}{\thmname{#1} \thmnumber{#2} \thmnote{(#3)}}
	\newtheoremstyle{thmstyle}{3pt}{3pt}{\citshape}{-3pt}{
		\bfseries\color{second}}{}{0.5em}{\thmname{#1} \thmnumber{#2} \thmnote{(#3)}}
	\newtheoremstyle{prostyle}{3pt}{3pt}{\citshape}{-3pt}{
		\bfseries\color{third}}{}{0.5em}{\thmname{#1} \thmnumber{#2} \thmnote{(#3)}}


	\theoremstyle{defstyle} % definition style
	\newtheorem{definition}{\definitionname}[chapter]

	\theoremstyle{thmstyle} %theorem style
	\newtheorem{theorem}{\theoremname}[chapter]
	\newtheorem{lemma}{\lemmaname}[chapter]
	\newtheorem{corollary}{\corollaryname}[chapter]
	\newtheorem{postulate}{\postulatename}[chapter]
	\newtheorem{axiom}{\axiomname}[chapter]

	\theoremstyle{prostyle} % proposition style
	\newtheorem{proposition}{\propositionname}[chapter]
}{\relax}

% main（green-def): example exercise problem solution
% second（orange-thm）: proof note remark  
% third（blue-prop):  assumptions property conclusion custom

%% Example with counter
\newcounter{exam}[chapter]
\setcounter{exam}{0}
\renewcommand{\theexam}{\thechapter.\arabic{exam}}
\newenvironment{example}[1][]{
	\refstepcounter{exam}
	\par\noindent\textbf{\color{main}{\examplename} \theexam #1 }\rmfamily}{
	\par\ignorespacesafterend}

%% Exercise with counter
\newcounter{exer}[chapter]
\setcounter{exer}{0}
\renewcommand{\theexer}{\thechapter.\arabic{exer}}
\newenvironment{exercise}[1][]{
	\refstepcounter{exer}
	\par\noindent\makebox[-3pt][r]{
		\scriptsize\color{red!90}\HandPencilLeft\quad}
	\textbf{\color{main}{\exercisename} \theexer #1 }\rmfamily}{
	\par\ignorespacesafterend}

%% Problem with counter
\newcounter{prob}[chapter]
\setcounter{prob}{0}
\renewcommand{\theprob}{\thechapter.\arabic{prob}}
\newenvironment{problem}[1][]{
	\refstepcounter{prob}
	\par\noindent\textbf{\color{main}{\problemname} \theprob #1 }\rmfamily}{
	\par\ignorespacesafterend}

\newenvironment{note}{
	\par\noindent\makebox[-3pt][r]{
		\scriptsize\color{red!90}\textdbend\quad}
	\textbf{\color{second}\notename} \citshape}{\par}

\newenvironment{proof}{
	\par\noindent\textbf{\color{second}\proofname\;}
	\color{black!90}\cfs}{
	% \hfill$\Box$\quad
	\par}

\newenvironment{solution}{\par\noindent\textbf{\color{main}\solutionname} \citshape}{\par}
\newenvironment{remark}{\noindent\textbf{\color{second}\remarkname}}{\par}
\newenvironment{assumption}{\par\noindent\textbf{\color{third}\assumptionname} \citshape}{\par}
\newenvironment{conclusion}{\par\noindent\textbf{\color{third}\conclusionname} \citshape}{\par}
\newenvironment{property}{\par\noindent\textbf{\color{third}\propertyname} \citshape}{\par}
\newenvironment{custom}[1]{\par\noindent\textbf{\color{third} #1} \citshape}{\par}

\RequirePackage{multicol}
\tcbset{
	introductionsty/.style={
			enhanced,
			breakable,
			colback=structurecolor!10,
			colframe=structurecolor,
			fonttitle=\bfseries,
			colbacktitle=structurecolor,
			fontupper=\citshape,
			attach boxed title to top center={yshift=-3mm,yshifttext=-1mm},
			boxrule=0pt,
			toprule=0.5pt,
			bottomrule=0.5pt,
			top=8pt,
			before skip=8pt,
			sharp corners
		},
}

\newenvironment{introduction}[1][\introductionname]{
	\begin{tcolorbox}[introductionsty,title={#1}]
		\begin{multicols}{2}
			\begin{itemize}[label=\textcolor{structurecolor}{\upshape\scriptsize\SquareShadowBottomRight}]}{
			\end{itemize}
		\end{multicols}
	\end{tcolorbox}}

\RequirePackage{adforn}
\newenvironment{problemset}[1][\chaptername~\problemsetname]{
	\begin{center}
		\phantomsection\addcontentsline{toc}{section}{\texorpdfstring{\chaptername\;\problemsetname}{\problemsetname}}
		\textcolor{structurecolor}{\Large\bfseries\adftripleflourishleft~#1~\adftripleflourishright}
	\end{center}
	\begin{enumerate}}{
	\end{enumerate}}

\def\relsec{\endgroup start}
\def\endrelsec{end\begingroup\def \@currenvir {relsec}}

\ifdefstring{\ELEGANT@result}{noanswer}{
	\AtBeginDocument{
		\excludecomment{solution}
		\excludecomment{proof}
		\excludecomment{inline}
	}
}{\relax}


%页眉页脚
\RequirePackage{fancyhdr}
% \usemintedstyle[swift]{xcode}
\RequirePackage[newfloat,cachedir=/tmp/minted]{minted}
% \RequirePackage{emoji}
\RequirePackage{float}
\RequirePackage[nameinlink]{cleveref}
\SetupFloatingEnvironment{listing}{name=代码}
\crefname{listing}{\listingname}{\listingname s}
\newminted{python}{autogobble,linenos,breaklines,breakanywhere,showtabs,showspaces,breaksymbolindentleft=0pt,breaksymbolsepleft=0pt,breaksymbolindentright=0pt,breaksymbolsepright=0pt,python3}
\newmintedfile{python}{autogobble,linenos,breaklines,breakanywhere}
\newenvironment{python}{\VerbatimEnvironment\begin{pythoncode}}{\end{pythoncode}}
\newmintinline{python}{autogobble,linenos,breaklines,breakanywhere}
\newminted{cuda}{autogobble,linenos,breaklines,breakanywhere,showtabs,showspaces,breaksymbolindentleft=0pt,breaksymbolsepleft=0pt,breaksymbolindentright=0pt,breaksymbolsepright=0pt}
\newmintedfile{cuda}{autogobble,linenos,breaklines,breakanywhere}
\newenvironment{cuda}{\VerbatimEnvironment\begin{cudacode}}{\end{cudacode}}
\newmintinline{cuda}{autogobble,linenos,breaklines,breakanywhere}
\newmintedfile{cmake}{autogobble,linenos,breaklines,breakanywhere}
\newenvironment{cmake}{\VerbatimEnvironment\begin{cmakecode}}{\end{cmakecode}}
\newmintinline{cmake}{autogobble,linenos,breaklines,breakanywhere}

\newminted{bash}{autogobble,linenos,breaklines,breakanywhere,showtabs,showspaces,breaksymbolindentleft=0pt,breaksymbolsepleft=0pt,breaksymbolindentright=0pt,breaksymbolsepright=0pt,bgcolor=codebgcolor}
\newmintedfile{bash}{autogobble,linenos,breaklines,breakanywhere}
\newenvironment{bash}{\VerbatimEnvironment\begin{bashcode}}{\end{bashcode}}
\newmintinline{bash}{autogobble,linenos,breaklines,breakanywhere}


\newminted{html}{autogobble,breaklines,breakanywhere,bgcolor=codebgcolor}
\newmintinline{html}{autogobble,breaklines,breakanywhere,bgcolor=codebgcolor}
\newenvironment{html}{\VerbatimEnvironment\begin{htmlcode}}{\end{htmlcode}}

\newminted{rust}{autogobble,linenos,breaklines,breakanywhere,breaksymbolindentleft=0pt,breaksymbolsepleft=0pt,breaksymbolindentright=0pt,breaksymbolsepright=0pt,bgcolor=codebgcolor,fontfamily=NotoSansMNerdFont,fontencoding=T1}
\newmintedfile{rust}{autogobble,linenos,breaklines,breakanywhere}
\newenvironment{rust}{\VerbatimEnvironment\begin{rustcode}}{\end{rustcode}}
\newmintinline{rust}{autogobble,linenos,breaklines,breakanywhere}

\newminted{toml}{autogobble,linenos,breaklines,breakanywhere,breaksymbolindentleft=0pt,breaksymbolsepleft=0pt,breaksymbolindentright=0pt,breaksymbolsepright=0pt,bgcolor=codebgcolor}
\newmintedfile{toml}{autogobble,linenos,breaklines,breakanywhere}
\newenvironment{toml}{\VerbatimEnvironment\begin{tomlcode}}{\end{tomlcode}}
\newmintinline{toml}{autogobble,linenos,breaklines,breakanywhere}

\fancyhf{}


\fancyfoot[c]{\color{structurecolor}\scriptsize\thepage}
\if@twoside
	\fancyhead[ER]{\color{structurecolor}\cnormal\leftmark}
	\fancyhead[OL]{\color{structurecolor}\cnormal\rightmark}
\else
	\fancyhead[R]{\color{structurecolor}\cnormal\rightmark}
\fi

\renewcommand{\headrule}{\color{structurecolor}\hrule width\textwidth}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{1pt}
% \renewcommand{\headrule}{}
\fancypagestyle{plain}{\renewcommand{\headrulewidth}{0pt}\fancyhf{}\renewcommand{\headrule}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\, #1}{} }
\renewcommand{\chaptermark}[1]{\markboth{\chaptername \, #1\,}{}}

\renewcommand{\baselinestretch}{1.35}

\renewcommand*{\maketitle}{%
	\hypersetup{pageanchor=false}
	\pagenumbering{Alph}
	\begin{titlepage}
		\newgeometry{margin = 0in}
		\parindent=0pt
		\ifdefstring{\ELEGANT@device}{normal}{
			\ifcsname @cover\endcsname
				\includegraphics[width=\linewidth]{\@cover}
			\else
				\includegraphics[width=\linewidth]{example-image}
			\fi
		}{\relax}
		\ifdefstring{\ELEGANT@device}{pad}{
			\ifcsname @cover\endcsname
				\includegraphics[trim=0 26bp 0 26bp,clip=true, width=\linewidth]{\@cover}
			\else
				\includegraphics[trim=0 26bp 0 26bp,clip=true, width=\linewidth]{example-image}
			\fi
		}{\relax}
		\setlength{\fboxsep}{0pt}
		\colorbox{second}{\makebox[\linewidth][c]{\shortstack[c]{\vspace{0.5in}}}}
		\vfill
		\vskip-2ex
		\hspace{2em}
		\parbox{0.8\textwidth}{
			\bfseries\Huge
			\ifcsname @title\endcsname \@title \fi
			\par}
		\vfill
		\vspace{-1.0cm}
		\setstretch{2.5}
		\hspace{2.5em}
		\begin{minipage}[c]{0.67\linewidth}
			{\color{darkgray}\bfseries\Large
				\ifcsname @subtitle\endcsname\@subtitle\\[2ex]\fi}
			\color{gray}\normalsize
			{\renewcommand{\arraystretch}{0.618}
				\begin{tabular}{l}
					% \ifcsname @author\endcsname \authorname \@author\\\fi
					\ifx\@author\empty\else\authorname\cnormal\@author                \\ \fi
					\ifcsname @institute\endcsname \institutename \cnormal\@institute \\ \fi
					% \ifcsname @date\endcsname  \@date\\\fi
					\ifx\@date\empty\else\datename\cnormal\@date                      \\ \fi
					\ifcsname @version\endcsname \cnormal\versionname\@version        \\ \fi
					\ifcsname @bioinfo\endcsname \cnormal\@bioinfo                    \\ \fi
				\end{tabular}}
		\end{minipage}
		\begin{minipage}[c]{0.27\linewidth}
			\begin{tikzpicture}[remember picture,overlay]
				\begin{pgfonlayer}{background}
					\node[opacity=0.8,
						anchor=south east,
						outer sep=0pt,
						inner sep=0pt] at ($(current page.south east) +(-0.8in,1.5in)$) {
						\ifcsname @logo\endcsname\includegraphics[width=4.2cm]{\@logo}\fi};
				\end{pgfonlayer}
			\end{tikzpicture}
		\end{minipage}
		\vfill
		\begin{center}
			\setstretch{1.3}
			\parbox[t]{0.7\textwidth}{\centering \citshape
				\ifcsname @extrainfo\endcsname\@extrainfo\fi}
		\end{center}
		\vfill
	\end{titlepage}
	\restoregeometry
	\thispagestyle{empty}}



\RequirePackage{listings}
\renewcommand{\ttdefault}{cmtt}
\lstdefinestyle{mystyle}{
	basicstyle=%
	\ttfamily
	\lst@ifdisplaystyle\small\fi
}

\lstset{basicstyle=\ttfamily,style=mystyle,breaklines=true}

\definecolor{lightgrey}{rgb}{0.9,0.9,0.9}
\definecolor{frenchplum}{RGB}{190,20,83}
\lstset{language=[LaTeX]TeX,
	texcsstyle=*\color{winered},
	numbers=none,
	mathescape,
	breaklines=true,
	keywordstyle=\color{winered},
	commentstyle=\color{gray},
	emph={elegantpaper,fontenc,fontspec,xeCJK,FiraMono,xunicode,newtxmath,figure,fig,image,img,table,itemize,enumerate,newtxtext,newtxtt,ctex,microtype,description,times,booktabs,tabular,PDFLaTeX,XeLaTeX,type1cm,BibTeX,device,color,mode,lang,amsthm,tcolorbox,titlestyle,cite,ctex,listings,base,math,scheme,toc,esint,chinesefont,amsmath,bibstyle,natbib,pgfornament},
	emphstyle={\color{frenchplum}},
	morekeywords={DeclareSymbolFont,SetSymbolFont,toprule,midrule,bottomrule,institute,version,includegraphics,setmainfont,setsansfont,setmonofont ,setCJKmainfont,setCJKsansfont,setCJKmonofont,RequirePackage,figref,tabref,email,maketitle,keywords,definecolor,extrainfo,logo,cover,subtitle,appendix,chapter,hypersetup,mainmatter,frontmatter,tableofcontents,elegantpar,heiti,kaishu,lstset,pagecolor,zhnumber,marginpar,part,equote,marginnote,bioinfo,datechange,listofchange,lvert,lastpage,songti,heiti,fangsong,setCJKfamilyfont,textbf},
	frame=single,
	tabsize=2,
	rulecolor=\color{structurecolor},
	framerule=0.2pt,
	columns=flexible,
	% backgroundcolor=\color{lightgrey}
}

\newcommand\bmmax{0}
\RequirePackage{bm}

% add the list of change history
\newcommand{\dateinfoline}[2]{
	\noindent\makebox[0pt][r]{%
		\makebox[-5em][r]{%
			\textbf{\textcolor{structurecolor}{#1}}}\quad}%
	{\citshape\updatename\ignorespaces#2}}

\newcommand{\datechange}[2]{%
	\noindent{\makebox[\textwidth][r]{\color{structurecolor}\rule{1.15\textwidth}{.4pt}}}
	\dateinfoline{#1}{#2}
	\addcontentsline{dates}{section}{#1 -- #2}}

\newcommand{\listofchanges}{%
	\begingroup
	\renewcommand{\contentsname}{\historyname}
	\let\old@starttoc\@starttoc
	\def\@starttoc##1{
		\old@starttoc{dates}}
	\tableofcontents%
	\endgroup}
% https://tex.stackexchange.com/questions/472931/list-of-all-dates-in-a-document

\newenvironment{change}{
	\begin{enumerate}[label=\small\protect\circled{\arabic*}]}{
	\end{enumerate}}
